package com.platform.helper.date;

import lombok.extern.slf4j.Slf4j;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * describe:日期工具类
 *
 * @author rainly
 * @date 2020/4/9
 * @time 11:07 上午
 */
@Slf4j
public class DateUtils {

    private DateUtils(){
    }

    /**
     * 获得年
     * @return yyyy
     */
    public static String getYear() {
        return new SimpleDateFormat(DateFormatEnum.YEAR.getCode()).format(new Date());
    }
    /**
     * 获得年
     * @return yyyy
     */
    public static int getYears() {
        return Integer.parseInt(getYear());
    }

    /**
     * 获得时间戳
     * @return yyyy-MM-dd HH:mm:ss SSS
     */
    public static String getTimestampStr() {
        return new SimpleDateFormat(DateFormatEnum.TIMESTAMP.getCode()).format(new Date());
    }
    /**
     * 获得时间戳
     * @return yyyyMMddHHmmssSSS
     */
    public static String getTimestamp() {
        return new SimpleDateFormat(DateFormatEnum.TIMESTAMPS.getCode()).format(new Date());
    }

    /**
     * 获得时间戳
     * @return yyyyMMddHHmmssSSS
     */
    public static long getTimestamps() {
        return Long.parseLong(getTimestamp());
    }

    /**
     * 获得年月日
     * @return yyyy-MM-dd
     */
    public static String getYearMonthDay() {
        return new SimpleDateFormat(DateFormatEnum.DAY.getCode()).format(new Date());
    }

    /**
     * 获得年月日
     * @return yyyyMMdd
     */
    public static String getDayStr() {
        return new SimpleDateFormat(DateFormatEnum.DAYS.getCode()).format(new Date());
    }
    /**
     * 获得年月日
     * @return yyyyMMdd
     */
    public static int getDays() {
        return Integer.parseInt(getDayStr());
    }

    /**
     * 获取yyyyMMddHHmmss格式
     * @return yyyyMMddHHmmss
     */
    public static String getTimeStr() {
        return new SimpleDateFormat( DateFormatEnum.TIME.getCode()).format(new Date());
    }

    /**
     * 获取yyyyMMddHHmmss格式
     * @return yyyyMMddHHmmss
     */
    public static long getTimes() {
        return Long.parseLong(getTimeStr());
    }

    /**
     * 获取时间
     * @return yyyyMMddHHmmss
     */
    public static String getTime() {
        return new SimpleDateFormat(DateFormatEnum.TIMES.getCode()).format(new Date());
    }

    /**
     * 格式日期
     * @param date 日期
     * @return Date
     */
    public static Date formatDate(String date) {
        if (date == null || "".equals(date)){
            return null;
        }
        DateFormat fmt = new SimpleDateFormat(DateFormatEnum.DAY.getCode());
        try {
            return fmt.parse(date);
        } catch (ParseException e) {
            log.error("格式日期异常", e);
            return null;
        }
    }

    /**
     * 格式时间
     * @param time 时间
     * @return Date
     */
    public static Date formatTime(String time) {
        if (time == null || "".equals(time)){
            return null;
        }
        DateFormat fmt = new SimpleDateFormat(DateFormatEnum.TIME.getCode());
        try {
            return fmt.parse(time);
        } catch (ParseException e) {
            log.error("自定义日期格式化字符串错误",e);
            return null;
        }
    }

    /**
     * 自定义日期格式化字符串
     *
     * @return String
     */
    public static String dateToString(Date date, DateFormatEnum format) {
        if (date == null){
            return null;
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format.getCode());
        try {
            return simpleDateFormat.format(date);
        } catch (Exception e) {
            log.error("自定义日期格式化字符串错误",e);
            return null;
        }
    }
}
